package com.example.demo.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.websocket.Session;


import java.util.concurrent.ConcurrentHashMap;
/*
、管理WebSocket会话信息，并且将这些信息存入Redis
 */
@Component//自动扫描并注册为spring容器Bean
public class SessionManager {
    //线程安全的哈希表，存储会话信息
    private final ConcurrentHashMap<String, Session> sessions = new ConcurrentHashMap<>();


    //SESSION_KEY一个字符串个常量字符串，表示在 Redis 中存储会话信息的键。
    private static final String SESSION_KEY = "chat:sessions";
    @Autowired
    //RedisTemplate，用于操作 Redis，与Redis数据库交互
    //RedisTemplate：Spring Data Redis 提供的模板类，用于简化 Redis 操作。
    private RedisTemplate<String, String> redisTemplate;
    //存储会话信息,用户id，用户姓名，发送消息
    public void storeSession(String userId, Session session) {
        //opsForHash调用此方法获取Redis中哈希数据结构的操作支持
        //创建一个哈希结构存储用户信息
        redisTemplate.opsForHash().put(
                //SESSION_KEY存储会话信息的哈希主键
                SESSION_KEY,
                userId +":sessionId",
                session.getId()
        );


    }

    // 获取会话信息
    public String getSession(String userId) {
        return (String) redisTemplate.opsForHash().get(SESSION_KEY, userId);
    }

    // 删除会话信息
    public void removeSession(String userId) {
        redisTemplate.opsForHash().delete(SESSION_KEY, userId);
    }


}
